package com.wondersgroup.fjzlpt.yyzyzx.service.impl.yyzygl.jcgzgl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import com.wondersgroup.fjzlpt.yyzyzx.dao.inter.yyzygl.yysz.BhcxmDao;
import com.wondersgroup.fjzlpt.yyzyzx.service.inter.yyzygl.jcgzgl.XmhcgzszService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.wondersgroup.fjzlpt.yyzyzx.dao.inter.yyzygl.yysz.HcgzDao;

/**
 * 项目互斥规则设置Service
 * @author gzb   
 * 2017年8月8日
 */
@SuppressWarnings({"rawtypes","unchecked"})
@Service
public class XmhcgzszServiceImpl implements XmhcgzszService {

	@Autowired
	private HcgzDao hcgzDao;
	@Autowired
	private BhcxmDao bhcxmDao;
	
	/**
	 * 保存/修改 项目互斥规则设置
	 * @param map
	 * @return
	 */
	@Override
	public JSONObject save(Map map) {
		JSONObject result = new JSONObject();
		
		if(map.get("ZT") == null){
			map.put("ZT", "1");
		}
		
		String type = map.get("type").toString();
		if("add".equals(type)){
			insert(map, result);
		}else{
			update(map, result);
		}
		return result;
	}
	
	/**
	 * 添加 项目互斥规则设置
	 * @param map
	 * @param result
	 */
	private void insert(Map map, JSONObject result){
		try {
			map.put("GZBH", UUID.randomUUID().toString());
			
			//插入互斥规则设置
			hcgzDao.insert(map);
			//插入互斥项目
			this.insertBhcxm(map);
			
			result.put("state", "1");
			result.put("info", "项目互斥规则设置信息保存成功！");
		} catch (Exception e) {
			result.put("info", "项目互斥规则设置信息保存失败！");
			throw new RuntimeException("项目互斥规则设置信息保存失败！");
		}
	}
	
	/**
	 * 修改 项目互斥规则设置
	 * @param map
	 * @param result
	 */
	private void update(Map map, JSONObject result){
		try {
			//修改互斥规则
			hcgzDao.updateForPrimaryKey(map);
			//添加被互斥项目
			this.insertBhcxm(map);
			
			result.put("state", "1");
			result.put("info", "项目互斥规则设置信息修改成功！");
		} catch (Exception e) {
			result.put("info", "项目互斥规则设置信息修改失败！");
			throw new RuntimeException("项目互斥规则设置信息修改失败！");
		}
	}
	
	/**
	 * 批量插入 被互斥项目
	 * @param map
	 */
	private void insertBhcxm(Map map){
		Object bhcxm = map.get("bhcxm");
		if(map.get("bhcxm")!=null && !"".equals(bhcxm)){
			//删除被互斥项目
			bhcxmDao.deleteByGzbh(map.get("GZBH").toString());
			//重新添加
			JSONArray bhcxmArr = JSONArray.parseArray(bhcxm.toString());
			if(bhcxmArr != null && bhcxmArr.size()>0){
				List list = new ArrayList();
				for(int i=0;i<bhcxmArr.size();i++){
					Map yyfsyxjMap = (Map)bhcxmArr.getJSONObject(i);
					yyfsyxjMap.put("GZBH", map.get("GZBH"));
					list.add(yyfsyxjMap);
				}
				bhcxmDao.insertBatch(list);
			}
		}
	}

	/**
	 * 分页查询 项目互斥规则设置
	 * @param map
	 * @return
	 */
	@Override
	public JSONObject queryPage(Map map) {
		return hcgzDao.queryPage(map);
	}

	/**
	 * 删除 项目互斥规则设置
	 * @param map
	 * @return
	 */
	@Override
	public JSONObject delete(Map map) {
		JSONObject result = new JSONObject();
		try {
			hcgzDao.deleteForPrimaryKey(map);
			bhcxmDao.deleteByGzbh(map.get("GZBH").toString());
			result.put("state", "1");
			result.put("info", "删除成功！");
		} catch (Exception e) {
			result.put("info", "项目互斥规则设置信息删除失败！");
			throw new RuntimeException("项目互斥规则设置信息删除失败！");
		}
		return result;
	}

	/**
	 * 查询被排斥项目
	 * @param map
	 * @return
	 */
	@Override
	public JSONObject queryBpcxm(Map map) {
		JSONObject result = new JSONObject();
		Object GZBH = map.get("GZBH");
		if(GZBH!=null){
			JSONArray bhcxmArr = bhcxmDao.queryByGzbh(GZBH.toString());
			result.put("data", bhcxmArr);
			result.put("state", "1");
		}else{
			result.put("info", "被排斥项目查询失败，请稍后重试！");
			throw new RuntimeException("【GZBH】字段不存在");
		}
		return result;
	}

}
